package top.lcm889.demo.经典算法;

/**
 * @author Coder-lcm
 * @date 2021/4/7
 */
public class M1_二分查找算法 {

    /**
     * 二分查找
     * @param nums ： 要查找的数据范围（必须是有序的才能用二分查找/搜索）
     * @param target : 要查找的目标值
     * @return
     */
    public int binarySearch(int[] nums, int target){
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            // 这里是为了防止直接(left + right)出现的整型数据越界
            int mid = left + (right - left) / 2;
            if (target == nums[mid]){
                return mid; // 返回索引
            }else if (target > nums[mid]) {
                left = mid + 1;
            }else if (target < nums[mid]) {
                right = mid - 1;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        M1_二分查找算法 test = new M1_二分查找算法();
        System.out.println(test.binarySearch(new int[]{1, 4, 7, 7, 9, 10}, 7));
    }
}
